/**
 * Project  : Looker
 * Package  : net.freestu.looker.monitor
 * File     : ModifyChecker.java
 * Author   : solosky < solosky772@qq.com >
 * Date     : Aug 26, 2009
 * Modified : Aug 26, 2009
 * License  : Apache License 2.0 
 */
package net.freestu.looker.monitor;

import java.util.ArrayList;
import java.util.Iterator;

import net.freestu.looker.common.NewsMeta;

/**
 *  新闻更改检查器
 */
public class ModifyChecker
{
	/**
	 * 以前新闻列表
	 */
	private ArrayList<NewsMeta> beforeList;
	
	/**
	 * 当前新闻列表
	 */
	private ArrayList<NewsMeta> currentList;
	
	/**
	 * 新增新闻列表
	 */
	private ArrayList<NewsMeta> addedNewsList;
	
	/**
	 * 删除新闻列表
	 */
	private ArrayList<NewsMeta> deletedNewsList;
	
	/**
	 * 更新的新闻列表
	 */
	private ArrayList<NewsMeta> updatedNewsList;
	/**
	 * 构造函数
	 * @param beforeList
	 * @param currentList
	 */
	public ModifyChecker(ArrayList<NewsMeta> beforeList, ArrayList<NewsMeta> currentList)
	{
		this.beforeList  = beforeList;
		this.currentList = currentList; 
	}
	
	/**
	 * 检查新闻更改情况
	 */
	public void checkModify()
	{
		if(beforeList.size()==0 || currentList.size()==0)
			return;
		checkAdd();
	}
	
	/**
	 * 检查新增
	 * 当前列表有，而以前列表没有的即为新增新闻
	 */
	private void checkAdd()
	{
		//建立一个hash表，存放以前的新闻的地址
		ArrayList<String> beforeHash = new ArrayList<String>();
		Iterator<NewsMeta> it = beforeList.iterator();
		while(it.hasNext()) {
			beforeHash.add(it.next().getHash());
		}
		//遍历当前新闻列表，查找新增新闻
		it = currentList.iterator();
		NewsMeta  tmpNewsMeta = null;
		while(it.hasNext()) {
			 tmpNewsMeta = it.next();
			if(!beforeHash.contains(tmpNewsMeta.getHash())) {
				if(addedNewsList==null) {
					addedNewsList = new ArrayList<NewsMeta>();
				}
				addedNewsList.add( tmpNewsMeta );	
			}
		}
	}

	/**
	 * 返回新增新闻列表
	 */
	public ArrayList<NewsMeta> getAddedNewsList()
    {
    	return addedNewsList;
    }

	/**
	 * 返回删除新闻列表
	 */
	public ArrayList<NewsMeta> getDeletedNewsList()
    {
    	return deletedNewsList;
    }
	
	/**
	 * 返回更新新闻列表
	 */
	public ArrayList<NewsMeta> getUpdatedNewsList()
    {
    	return updatedNewsList;
    }
	
}
